#include	<sys/mman.h>
#include	<sys/stat.h>
#include	<algorithm>
#include	<stdint.h>
#include	<iostream>
#include	<fstream>
#include	<vector>
#include	<unistd.h>
#include	<cstdlib>
#include	<fcntl.h>
using	namespace	std;
struct	Sort{
	uint16_t	i;
	uint64_t	n;
	bool	operator()(Sort	X,	Sort	Y){	return	X.n>Y.n;	}
};
int	main(int	ac,	char	**av){
	Sort	vs[65536];	for(size_t	i=0;	i<65536;	i++){	vs[i].i=i;	vs[i].n=0;	}
	uint64_t	tot=0;
	for(int	i=1;	i<ac;	i++){
		int	fd=open(av[i],	O_RDONLY);
		struct	stat	sb;
		uint16_t	*data_ptr;
		fstat(fd,	&sb);
		data_ptr=(uint16_t*)mmap(NULL,	sb.st_size,	PROT_READ,	MAP_SHARED,	fd,	0);
		uint64_t	size=sb.st_size>>1;
		for(uint64_t	j=0;	j<size;	j++)	vs[data_ptr[j]].n++;
		tot+=size;
		munmap(data_ptr,sb.st_size);	close(fd);		
	}
	sort(vs,vs+65536,Sort());
	ofstream	fo("voca.txt");
	for(size_t	i=0;	i<128;	i++)	fo<<i<<'\n';
	size_t	n=128;
	for(size_t	i=0;	i<65536&&n<8192;	i++)	if(vs[i].i>=128){
		fo<<vs[i].i<<'\n';	n++;
	}
	fo.close();		
	return	0;
}
